package com.ts.api.module.channel.service;


import com.ts.api.module.channel.entity.po.ChannelFormFieldPO;
import com.ts.api.module.channel.entity.po.ChannelUserFormFieldPO;
import com.ts.api.module.channel.entity.po.ChannelUserFormPO;
import com.ts.api.module.channel.entity.qo.ChannelUserFormMappingQO;
import com.ts.api.module.channel.entity.vo.ReqChannelFormVO;
import com.ts.cache.form.entity.FormCache;

import java.util.List;

/**
 *  渠道表单业务层
 */
public interface ChannelFormService {

    /**
     * 根据渠道获取表单字段列表
     *
     * @param channelId 渠道ID
     * @return List
     */
    List<ChannelFormFieldPO> listByChannelId(Long channelId);

    /**
     * 根据渠道上下文获取用户填写表单
     *
     * @return List
     */
    List<ChannelUserFormFieldPO> listUserFormField();

    /**
     *  根据用户id填写表单
     *
     *  @param  userId  用户id
     *  @return List
     */
    List<ChannelUserFormFieldPO> listUserFormField(Long userId);

    /**
     * 根据用户及指定表单映射名称获取表单字段及表单字段值
     *
     * @param  channelUserFormMappingQO  用户映射表单查询对象
     * @return List
     */
    List<ChannelUserFormFieldPO> listFieldByMappingNameAndUser(ChannelUserFormMappingQO channelUserFormMappingQO);

    /**
     * 检测表单值
     *
     * @param listVO
     */
    void checkFormParam(List<ReqChannelFormVO> listVO);

    /**
     *  根据输入的映射名称及映射值，返回缓存字典对象
     *
     *  @author pan
     *  @param  mappingName     映射名称
     *  @param  mappingValue    映射值
     *  @return
     */
    FormCache getFormMappingValue(String mappingName, String mappingValue);

    /**
     * 插入用户表单
     *
     * @param  listChannelUserFormPO
     * @return int
     */
    int batchInsertUserForm(List<ChannelUserFormPO> listChannelUserFormPO);
}
